// 技能聊天页面
Page({
  data: {
    skillId: '',
    skillName: '',
    providerPhone: '',
    messages: [],
    inputValue: '',
    scrollTop: 0,
    loading: false,
    aiEnabled: true // 是否启用AI回复
  },

  onLoad: function (options) {
    console.log('聊天页面加载，参数:', options);
    
    // 设置页面标题
    wx.setNavigationBarTitle({
      title: `与${options.skillName}提供者聊天`
    });

    // 初始化数据
    this.setData({
      skillId: options.skillId || '',
      skillName: options.skillName || '技能提供者',
      providerPhone: options.providerPhone || ''
    });

    // 加载聊天记录
    this.loadChatHistory();
  },

  /**
   * 加载聊天记录
   */
  loadChatHistory: function() {
    // 模拟加载聊天记录
    const mockMessages = [
      {
        id: 1,
        type: 'system',
        content: `您正在与${this.data.skillName}的提供者聊天`,
        time: new Date().toLocaleTimeString()
      },
      {
        id: 2,
        type: 'received',
        content: '您好！我是专业的技能提供者，请问有什么可以帮助您的吗？',
        time: new Date().toLocaleTimeString()
      }
    ];

    this.setData({
      messages: mockMessages
    });

    // 滚动到底部
    this.scrollToBottom();
  },

  /**
   * 输入框内容变化
   */
  onInputChange: function(e) {
    this.setData({
      inputValue: e.detail.value
    });
  },

  /**
   * 发送消息
   */
  sendMessage: function() {
    const content = this.data.inputValue.trim();
    if (!content) {
      return;
    }

    // 添加发送的消息
    const newMessage = {
      id: Date.now(),
      type: 'sent',
      content: content,
      time: new Date().toLocaleTimeString()
    };

    this.setData({
      messages: [...this.data.messages, newMessage],
      inputValue: ''
    });

    // 滚动到底部
    this.scrollToBottom();

    // 获取AI回复
    this.getAIResponse(content);
  },

  /**
   * 获取AI回复
   */
  getAIResponse: function(userMessage) {
    if (!this.data.aiEnabled) {
      // 如果AI未启用，使用模拟回复
      this.simulateReply();
      return;
    }

    // 显示AI正在思考的状态
    this.addThinkingMessage();

    // 构建AI请求数据
    const requestData = {
      skillName: this.data.skillName,
      userMessage: userMessage,
      context: this.getConversationContext()
    };

    // 调用后端AI接口
    wx.request({
      url: 'http://localhost:3001/api/ai/chat',
      method: 'POST',
      header: {
        'Content-Type': 'application/json'
      },
      data: requestData,
      timeout: 10000, // 10秒超时
      success: (res) => {
        console.log('AI接口返回:', res);
        // 移除思考状态
        this.removeThinkingMessage();
        
        if (res.data && res.data.success && res.data.data) {
          const aiResponse = res.data.data.message;
          this.addAIResponse(aiResponse);
        } else {
          // AI接口失败，使用模拟回复
          console.log('AI接口返回错误，使用模拟回复');
          this.simulateReply();
        }
      },
      fail: (err) => {
        console.error('AI接口调用失败:', err);
        // 移除思考状态
        this.removeThinkingMessage();
        
        // 检查是否是连接错误
        if (err.errMsg && err.errMsg.includes('ERR_CONNECTION_REFUSED')) {
          wx.showToast({
            title: '服务器未启动，请先启动后端服务',
            icon: 'none',
            duration: 3000
          });
        } else {
          wx.showToast({
            title: '网络连接失败，使用本地回复',
            icon: 'none',
            duration: 2000
          });
        }
        
        // AI接口失败，使用模拟回复
        this.simulateReply();
      }
    });
  },

  /**
   * 添加AI思考状态消息
   */
  addThinkingMessage: function() {
    const thinkingMessage = {
      id: 'thinking',
      type: 'thinking',
      content: 'AI正在思考中...',
      time: new Date().toLocaleTimeString()
    };

    this.setData({
      messages: [...this.data.messages, thinkingMessage]
    });

    this.scrollToBottom();
  },

  /**
   * 移除AI思考状态消息
   */
  removeThinkingMessage: function() {
    const messages = this.data.messages.filter(msg => msg.id !== 'thinking');
    this.setData({ messages });
  },

  /**
   * 添加AI回复
   */
  addAIResponse: function(content) {
    const aiMessage = {
      id: Date.now() + 1,
      type: 'received',
      content: content,
      time: new Date().toLocaleTimeString()
    };

    this.setData({
      messages: [...this.data.messages, aiMessage]
    });

    this.scrollToBottom();
  },

  /**
   * 获取对话上下文
   */
  getConversationContext: function() {
    // 获取最近的几条消息作为上下文
    const recentMessages = this.data.messages.slice(-5);
    return recentMessages.map(msg => `${msg.type === 'sent' ? '用户' : '提供者'}: ${msg.content}`).join('\n');
  },

  /**
   * 智能模拟回复（基于技能和用户消息）
   */
  simulateReply: function() {
    // 获取最后一条用户消息
    const userMessages = this.data.messages.filter(msg => msg.type === 'sent');
    const lastUserMessage = userMessages.length > 0 ? userMessages[userMessages.length - 1].content : '';
    
    // 根据技能类型和用户消息智能生成回复
    let reply = this.generateSmartReply(this.data.skillName, lastUserMessage);
    
    setTimeout(() => {
      const replyMessage = {
        id: Date.now() + 1,
        type: 'received',
        content: reply,
        time: new Date().toLocaleTimeString()
      };

      this.setData({
        messages: [...this.data.messages, replyMessage]
      });

      this.scrollToBottom();
    }, 800 + Math.random() * 1200); // 0.8-2秒随机延迟
  },

  /**
   * 生成智能回复
   */
  generateSmartReply: function(skillName, userMessage) {
    // 根据技能类型选择回复模板
    const skillTemplates = {
      '电脑维修': {
        keywords: {
          '价格': ['关于价格，我需要了解具体情况才能给您准确报价。不同品牌、型号的配件价格差异很大。您能告诉我电脑的具体型号和故障现象吗？'],
          '费用': ['维修费用根据故障类型和所需配件而定。一般软件问题50-100元，硬件更换200-500元不等。您遇到什么具体问题？'],
          '时间': ['维修时间取决于故障复杂程度。软件问题通常1-2小时，硬件更换需要2-4小时。您希望什么时候维修？'],
          '上门': ['我可以提供上门服务，需要额外收取20-50元上门费。您家住哪个区域？我可以安排合适的时间。'],
          '保修': ['维修后提供3个月保修期，软件问题免费重装，硬件问题按配件保修期执行。'],
          '显卡': ['显卡问题需要先诊断具体故障。可能是驱动问题、散热问题或硬件故障。您能描述一下具体症状吗？'],
          '蓝屏': ['蓝屏通常由驱动冲突、内存问题或系统文件损坏引起。建议先更新驱动，如果问题持续需要进一步检测。'],
          '慢': ['电脑变慢可能是系统垃圾、病毒或硬件老化。建议先清理系统，如果效果不明显可能需要升级硬件。'],
          '屏幕': ['屏幕问题需要先确定是硬件还是软件问题。如果是硬件损坏，需要更换屏幕，价格根据型号而定。您能描述一下具体问题吗？'],
          '过来': ['我可以提供上门维修服务。请告诉我您的地址，我会安排合适的时间上门。上门费20-50元，具体根据距离而定。'],
          '什么时候': ['我的工作时间是上午9点到晚上8点，周末也可以。您希望什么时候维修？我可以根据您的时间安排。']
        },
        general: [
          '您好！我是专业的电脑维修师，有5年以上维修经验。请详细描述您遇到的问题，我会为您提供专业的解决方案和合理报价。',
          '电脑维修是我的专长！我擅长各种品牌电脑的维修，从软件优化到硬件更换都能处理。您遇到什么具体问题？',
          '很高兴为您提供电脑维修服务！我提供上门维修，价格合理，质量有保障。请告诉我您的具体需求。'
        ]
      },
      '英语辅导': {
        keywords: {
          '口语': ['口语练习需要系统训练。我建议从音标开始，然后进行日常对话练习。您目前的英语水平如何？我可以制定个性化学习计划。'],
          '听力': ['听力训练建议从慢速英语开始，逐步提高难度。我推荐一些优质的学习资源，您希望重点提高哪个方面？'],
          '语法': ['语法学习需要循序渐进。我建议从基础语法开始，配合大量练习。您对哪些语法点比较困惑？'],
          '考试': ['考试准备需要针对性训练。请告诉我您准备参加什么考试，我可以为您制定详细的复习计划。'],
          '价格': ['英语辅导价格根据课程类型和时长而定。一对一辅导80-120元/小时，小班课程50-80元/小时。您希望哪种形式？'],
          '时间': ['我可以根据您的时间安排课程。工作日晚上和周末都有空余时间。您希望什么时间上课？'],
          '单词': ['单词记忆需要科学方法。我建议使用词根词缀法、联想记忆法等。您希望重点记忆哪类单词？'],
          '水平': ['请告诉我您目前的英语水平，我可以为您制定合适的学习计划。从基础到高级，我都有相应的教学方案。']
        },
        general: [
          '您好！我是专业的英语老师，有丰富的教学经验。我可以帮您制定个性化的学习计划，从基础到高级全面提升。',
          '英语学习需要科学的方法！我擅长因材施教，可以根据您的具体情况制定学习方案。您希望重点提高哪个方面？',
          '很高兴为您提供英语辅导！我拥有丰富的教学经验，可以帮助您快速提升英语水平。请告诉我您的学习目标。'
        ]
      },
      '手工编织': {
        keywords: {
          '毛衣': ['毛衣编织需要选择合适的毛线和针号。我建议初学者从简单的款式开始，我可以教您基础针法和花样编织。您想学习哪种款式？'],
          '围巾': ['围巾是很好的入门项目！使用粗毛线和粗针，编织速度快。我可以教您多种针法和花样。您喜欢什么颜色？'],
          '针法': ['基础针法包括平针、反针、加针、减针等。我建议从平针开始练习，掌握基本技巧后再学习花样。您想学习哪种针法？'],
          '毛线': ['选择毛线要考虑材质、粗细和颜色。我建议初学者选择中粗毛线，容易编织且效果明显。您想编织什么项目？'],
          '价格': ['编织课程价格根据项目复杂程度而定。基础课程50-80元/次，高级课程100-150元/次。您想学习什么项目？'],
          '时间': ['编织课程时间灵活，我可以根据您的时间安排。每次课程1-2小时，您希望什么时候开始？'],
          '花样': ['花样编织有很多种，从简单的平针到复杂的图案。我建议从基础花样开始，逐步提高难度。您想学习哪种花样？']
        },
        general: [
          '您好！我是手工编织爱好者，有丰富的编织经验。我可以教您从基础针法到复杂花样的各种编织技巧。',
          '手工编织是一门很有魅力的技艺！我擅长各种编织方法，从简单的围巾到复杂的毛衣都能教您。',
          '很高兴为您提供编织指导！我拥有丰富的编织经验，可以教您各种针法和花样。请告诉我您想学习什么。'
        ]
      }
    };

    // 获取对应技能的模板
    const template = skillTemplates[skillName] || skillTemplates['电脑维修'];
    
    // 检查关键词匹配
    for (const [keyword, responses] of Object.entries(template.keywords || {})) {
      if (userMessage.includes(keyword)) {
        return responses[Math.floor(Math.random() * responses.length)];
      }
    }
    
    // 使用通用回复
    const generalResponses = template.general || skillTemplates['电脑维修'].general;
    return generalResponses[Math.floor(Math.random() * generalResponses.length)];
  },

  /**
   * 滚动到底部
   */
  scrollToBottom: function() {
    setTimeout(() => {
      this.setData({
        scrollTop: 999999
      });
    }, 100);
  },

  /**
   * 拨打电话
   */
  makePhoneCall: function() {
    wx.makePhoneCall({
      phoneNumber: this.data.providerPhone.replace(/\*/g, ''),
      fail: () => {
        wx.showToast({ title: '拨号失败', icon: 'none' });
      }
    });
  },

  /**
   * 查看技能详情
   */
  viewSkillDetail: function() {
    wx.navigateTo({
      url: `/pages/neighborhood-help/skill-sharing/detail?id=${this.data.skillId}`
    });
  },

  /**
   * 切换AI模式
   */
  toggleAI: function() {
    this.setData({
      aiEnabled: !this.data.aiEnabled
    });
    
    wx.showToast({
      title: this.data.aiEnabled ? 'AI模式已开启' : 'AI模式已关闭',
      icon: 'none'
    });
  }
}); 